#ifndef __AGREEMENT_H__
#define __AGREEMENT_H__
#include "cJSON.h"
#include "tcp.h"

// 好友申请状态枚举
typedef enum
{
    APPLY_PENDING = 0,  // 待处理
    APPLY_ACCEPTED = 1, // 已同意
    APPLY_REJECTED = 2  // 已拒绝
} ApplyStatus;

// 私聊相关返回码
typedef enum
{
    PRIVATE_CHAT_SUCCESS_RECV_FROM_CLIENT = 0, // 服务器接收成功
    PRIVATE_CHAT_SUCCESS,                      // 发送成功
    PRIVATE_CHAT_ERROR_DB,                     // 数据库错误
    PRIVATE_CHAT_ERROR_PARAM,                  // 参数错误
} private_chat_code_t;

// 聊天室相关返回码
typedef enum
{
    CHATROOM_CHAT_SUCCESS_RECV_FROM_CLIENT = 0, // 服务器接收成功
    CHATROOM_CHAT_SUCCESS_SENDER,               // 发送成功
    CHATROOM_CHAT_ERROR_DB,                     // 数据库错误
    CHATROOM_CHAT_ERROR_PARAM,                  // 参数错误
} chat_room_code_t;

// 获取好友列表相关返回码
typedef enum
{
    GET_FRIENDLIST_SUCCESS = 0, // 查询成功
    GET_FRIENDLIST_ERROR,       // 查询失败
} get_friendList_code_t;

// 添加好友相关返回码
typedef enum
{
    ADD_FRIEND_SUCCESS = 0,            // 0：成功
    ADD_FRIEND_PARAM_ERROR = -1,       // -1：参数错误（输入JSON为空等）
    ADD_FRIEND_DATA_EXCEPTION = -2,    // -2：数据异常（含JSON解析失败、必要数据不完整）
    ADD_FRIEND_ALREADY_FRIEND = -4,    // -4：已是好友
    ADD_FRIEND_PENDING_APPLY = -5,     // -5：存在未处理的好友申请
    ADD_FRIEND_DB_ERROR = -6,          // -6：数据库操作失败（查询/插入失败等）
    ADD_FRIEND_ALREADY_FROM_NULL = -7, // -7：自己账号为空
    ADD_FRIEND_ALREADY_TO_NULL = -8,   // -8：对方账号为空
} ADD_FRIEND_ERR_CODE;

// 获取好友申请列表相关返回码
typedef enum
{
    GET_FRIEND_APPLY_LIST_SUCCESS = 0,             // 成功
    GET_FRIEND_APPLY_LIST_ERR_PARAM = -1,          // 参数错误
    GET_FRIEND_APPLY_LIST_ERR_USER_NOT_EXIST = -2, // 用户不存在
    GET_FRIEND_APPLY_LIST_ERR_DB_QUERY = -3        // 数据库查询失败
} GetFriendApplyListErrorCode;

// 好友申请处理相关返回码
typedef enum
{
    FRIEND_APPLY_SUCCESS = 0,     // 处理成功
    FRIEND_APPLY_PARAM_ERROR,     // 参数错误（如缺失字段、格式非法）
    FRIEND_APPLY_NOT_EXIST,       // 申请记录不存在（apply_id 错误）
    FRIEND_APPLY_ALREADY_HANDLED, // 申请已处理（已同意 / 已拒绝）
    FRIEND_APPLY_DB_ERROR,        // 数据库操作失败（查询 / 更新错误）
    FRIEND_APPLY_ALREADY_FRIEND,  // 已是好友 让申请人更新好友列表
} FriendApplyErrCode;

int handle_client_cmd(client_info_p client, char *recv_buf, char *resp_buf); // 处理客户端命令

// 私聊
void handle_private_chat_cmd(client_info_p client, cJSON *root, cJSON *response);
void generate_response_string(cJSON *response, char *resp_buf);

// 聊天室
void handle_join_chat_room_cmd(client_info_p client, cJSON *root, cJSON *response); // 加入聊天室
void handle_chat_room_cmd(client_info_p client, cJSON *root, cJSON *response);
int *get_all_online_fds(client_info_p client, int *fd_count);

// 获取好友列表
void handle_get_friendList_cmd(client_info_p client, cJSON *root, cJSON *response);

// 添加好友
void handle_add_friend_cmd(client_info_p client, cJSON *root, cJSON *response);

// 获取好友申请列表
void handle_get_friend_apply_list_cmd(client_info_p client, cJSON *root, cJSON *response);

// 同意/拒绝好友申请
void handle_friend_apply_action_cmd(client_info_p client, cJSON *root, cJSON *response);

// 退出登录
void handle_log_out_cmd(client_info_p client, cJSON *root, cJSON *response);

// 获取天气
int handle_weather_cmd(client_info_p client);
#endif